import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 读取.env文件
function readEnvFile() {
  const envPath = path.join(__dirname, "..", ".env");
  const envContent = fs.readFileSync(envPath, "utf8");

  const envVars = {};
  envContent.split("\n").forEach((line) => {
    const trimmedLine = line.trim();
    if (trimmedLine && !trimmedLine.startsWith("#")) {
      const [key, ...valueParts] = trimmedLine.split("=");
      if (key && valueParts.length > 0) {
        const value = valueParts.join("=").trim();
        envVars[key.trim()] = value;
      }
    }
  });

  return envVars;
}

// 更新package.json
function updatePackageJson(name, version) {
  const packagePath = path.join(__dirname, "..", "package.json");
  const packageContent = JSON.parse(fs.readFileSync(packagePath, "utf8"));

  // 更新name和version
  packageContent.name = name;
  packageContent.version = version;

  // 写回文件
  fs.writeFileSync(packagePath, JSON.stringify(packageContent, null, 2));

  console.log(`✅ 已更新 package.json:`);
  console.log(`   name: ${name}`);
  console.log(`   version: ${version}`);
}

// 更新package-lock.json
function updatePackageLockJson(name, version) {
  const packageLockPath = path.join(__dirname, "..", "package-lock.json");

  try {
    const packageLockContent = JSON.parse(
      fs.readFileSync(packageLockPath, "utf8")
    );

    // 更新根级别的name和version
    packageLockContent.name = name;
    packageLockContent.version = version;

    // 更新packages中的根包信息
    if (packageLockContent.packages && packageLockContent.packages[""]) {
      packageLockContent.packages[""].name = name;
      packageLockContent.packages[""].version = version;
    }

    // 写回文件
    fs.writeFileSync(
      packageLockPath,
      JSON.stringify(packageLockContent, null, 2)
    );

    console.log(`✅ 已更新 package-lock.json:`);
    console.log(`   name: ${name}`);
    console.log(`   version: ${version}`);
  } catch (error) {
    console.log(`⚠️  package-lock.json 更新失败: ${error.message}`);
    console.log(`   这可能是正常的，如果 package-lock.json 不存在或格式不正确`);
  }
}

// 更新index.html的title
function updateIndexHtml(appNameCN) {
  const indexPath = path.join(__dirname, "..", "index.html");

  try {
    let htmlContent = fs.readFileSync(indexPath, "utf8");

    // 使用正则表达式替换title标签内容
    const titleRegex = /<title>.*?<\/title>/;
    if (titleRegex.test(htmlContent)) {
      htmlContent = htmlContent.replace(
        titleRegex,
        `<title>${appNameCN}</title>`
      );
      fs.writeFileSync(indexPath, htmlContent);

      console.log(`✅ 已更新 index.html:`);
      console.log(`   title: ${appNameCN}`);
    } else {
      console.log(`⚠️  在 index.html 中未找到 title 标签`);
    }
  } catch (error) {
    console.log(`⚠️  index.html 更新失败: ${error.message}`);
  }
}

// 主函数
function main() {
  try {
    console.log("🔄 正在读取 .env 文件...");
    const envVars = readEnvFile();

    const appName = envVars.VITE_APP_NAME;
    const appVersion = envVars.VITE_APP_VERSION;
    const appNameCN = envVars.VITE_APP_NAME_CN;

    if (!appName || !appVersion) {
      console.error(
        "❌ 在 .env 文件中未找到 VITE_APP_NAME 或 VITE_APP_VERSION"
      );
      process.exit(1);
    }

    console.log(`📖 从 .env 文件读取到:`);
    console.log(`   VITE_APP_NAME: ${appName}`);
    console.log(`   VITE_APP_VERSION: ${appVersion}`);
    console.log(`   VITE_APP_NAME_CN: ${appNameCN}`);

    // 更新package.json
    updatePackageJson(appName, appVersion);

    // 更新package-lock.json
    updatePackageLockJson(appName, appVersion);

    // 更新index.html的title
    if (appNameCN) {
      updateIndexHtml(appNameCN);
    } else {
      console.log(`⚠️  在 .env 文件中未找到 VITE_APP_NAME_CN`);
    }

    console.log("✅ 所有文件更新完成，项目即将启动...");
  } catch (error) {
    console.error("❌ 脚本执行失败:", error.message);
    process.exit(1);
  }
}

// 执行主函数
main();
